from .rp_translation_index_fc import RPTranslationIndexFC


class RPTranslationTableFC(object):
    """
    Model:
        满足翻译对照表的所有算法逻辑

    Param:
        - env: odoo env

    Function:
        - get_table_line: 获取翻译对照表的某条记录，如果没有则创建
        - uni_update_table: 根据索引 更新记录，如果不存在改索引则更新（接口函数）
        - get_table: 根据条件获取翻译对照表
    """

    def __init__(self, env):
        self.env = env

    def get_table_line(self, program, client, index):
        """
        获取翻译对照表的某条记录，如果没有则创建

        :param index: 索引(rp.translation.index)
        :param program: 项目(rp.translation.program)
        :param client: 终端(rp.translation.client)

        @return translation_line(rp.translation.table)
        """
        table = self.env['rp.translation.table'].search([('program_id', '=', program.id), ('client_id', '=', client.id), ('index_id', '=', index.id)])
        if not table:
            table = self.env['rp.translation.table'].create({'program_id': program.id, 'client_id': client.id, 'index_id': index.id})
        return table

    def update_table(self, program, client, index, chinese, english, spanish, catalan):
        """
        根据索引 更新记录，如果不存在改索引则更新（接口函数）

        :param program: 项目(rp.translation.program)
        :param client: 终端(rp.translation.client)
        :param index: 索引，以"fir.sec.trd"存在

        :param chinese: 简体中文(char)
        :param english: 英文(US)(char)
        :param spanish: 西语(Español)(char)
        :param catalan: 加泰罗尼亚语(Català)(Char)

        @return translation_table(rp.translation.table)
        """
        # 1、获取索引
        index = RPTranslationIndexFC(self.env).get_index(index)
        # 2、查找对照表记录
        table = self.get_table_line(program, client, index)
        # 3、覆写语言记录
        table.write({'chinese': chinese if chinese else table.chinese,
                     'english': english if english else table.english,
                     'spanish': spanish if spanish else table.spanish,
                     'catalan': catalan if catalan else table.catalan})

